home *** CD-ROM | disk | FTP | other *** search
Wrap
Text File | 2005-03-12 | 43.2 KB | 1,330 lines
(*************************************************** Ant Movie Catalog importation script www.antp.be/software/moviecatalog/ [Infos] Authors=ScorEpioN Title=AllocinΘ Description=DonnΘes allocine.fr, Affiche allocine.fr ou amazon.fr Site=http://www.allocine.fr Language=FR Version=27 du 07/03/2005 Requires=3.5.0 Comments=Version rΘΘcrite par ScorEpioN pour remplacer l'ancienne version faite par Antoine Potten et Soltan License=This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. | GetInfo=1 [Options] Type de Lancement=1|1|0=Cherche le meilleur rΘsultat sans confirmation|1=Demande le titre avant de lancer le script|2=Ne demande pas le titre avant de lancer le script Format du Titre=3|3|0=Titre en minuscule|1=Titre en majuscule|2=PremiΦre lettre du titre en majuscule|3=PremiΦre lettre de chaque mot du titre en majuscule Recherche sur le titre=0|0|0=Traduit|1=Original Choix Image=1|1|0=Pas d'affiche|1=Petite affiche allocinΘ|2=Grande affiche allocinΘ|3=Grande affiche amazon.fr Acteurs=2|2|0=Ne prend pas la liste des acteurs|1=Prend les noms des acteurs de la page principale|2=Prend la liste complΦte des acteurs ainsi que leur r⌠le et le nom du producteur Secrets de tournage=2|2|0=Ne prend pas les secrets de tournage|1=Prend les scenes de tournage de la page principale|2=Prend la liste complΦte des scenes de tournage Note=2|2|0=Ne prend pas les notes ni dans le champs commentaire ni dans le champs rating|1=Prend les notes dans le champs rating avec une preference pour la note des spectateurs|2=Prend les notes dans le champs rating et dans le champs commentaire Critiques Presse=1|0|0=Aucune critique|1=Critiques presse de la page principale|2=Critiques presse complΦtes Disposition=1|1|0=Synopsis et Secrets de tournage dans le champs description|1=Les informations sont dispatchΘes ***************************************************) program Allocine_FR; var MovieName, Adresse, AdressePlus, La_liste, LaGrandeImage, LaPremiereGrandeImage, Reponse, AdresseSuivant, AdressePrecedent, LePremierFilmAdresse, strTemp, aucunAmazon : string; numPage, numPageG, numPageR, grandeTaille, premiereTaille, compteur, premiereExecution, numTemp, i : Integer; listeResultat: TStringList; //------------------------------------------------------------------------------ // VERIFIER LA VERSION DU SCRIPT //------------------------------------------------------------------------------ procedure verifVersion(); var Line, NewVersion : String; BeginPos, EndPos : Integer; begin Line := GetPage('http://forum.antp.be/phpbb2/viewtopic.php?t=1453'); BeginPos := pos('TELECHARGER LE SCRIPT ALLOCINE v', Line); delete(Line,1, BeginPos+31); EndPos := pos('du', Line); NewVersion := copy(Line, 1, EndPos - 2); if (ShowConfirmation('La derniΦre version est la '+NewVersion+'. Cliquer sur ''''OUI'''' pour la tΘlΘcharger.') = True) then begin Launch('iexplore.exe','http://www.ifrance.com/ricoland/AlloCine%20(FR).ifs'); end else exit; end; //------------------------------------------------------------------------------ // MET LE TITRE AU BON FORMAT //------------------------------------------------------------------------------ function formatTitre(titre : String; option : Integer) : string; begin if (option = 0) then begin titre := AnsiLowerCase(titre); end else if (option = 1) then begin titre := AnsiUpperCase(titre); end else if (option = 2) then begin titre := AnsiUpFirstLetter(titre); end else if (option = 3) then begin titre := AnsiMixedCase(titre,' -'); end; result := titre; end; //------------------------------------------------------------------------------ // CALCUL DE LA NOTE //------------------------------------------------------------------------------ function calculNote(Value : String) : string; begin if (Value = '0') then begin Value := '0'; end else if (Value = '1') then begin Value := '2'; end else if (Value = '2') then begin Value := '4'; end else if (Value = '3') then begin Value := '6'; end else if (Value = '4') then begin Value := '8'; end; result := Value; end; //------------------------------------------------------------------------------ // ANALYSE DE LA PAGE DE RECHERCHES //------------------------------------------------------------------------------ procedure AnalyzePage(Address: string); var LineNr: Integer; Line: string; BeginPos, EndPos : Integer; begin Line := GetPage(Address); if pos('Pas de rΘsultats',Line) <> 0 then begin if (GetOption('Type de Lancement') = 1) or (GetOption('Type de Lancement') = 2) then begin showmessage('Aucun film trouvΘ pour : '+MovieName); exit; end else begin SetField(fieldURL, '[Batch Allo-CinΘ] Aucun RΘsultat pour : '+MovieName); exit; end; end; if pos('Recherche :', Line) = 0 then begin Adresse := Address; AnalyzeMoviePage(); end else begin PickTreeClear; if pos('<h3><b>Films <h4>', Line) > 0 then begin EndPos := length(Line); Line := copy(Line,1,EndPos); BeginPos := Pos('<td colspan="2" valign="top">', Line); Delete(Line, 1, BeginPos); EndPos := length(Line); Line := copy(Line,1,EndPos); PickTreeAdd('Films trouvΘs pour ' + MovieName + ' :', ''); AddMoviesTitles(Line); PickTreeAdd(' ', ''); PickTreeAdd('Verifier si vous avez la derniΦre version', 'version'); PickTreeAdd('Pour me contacter', 'contact'); end; if compteur = 1 then begin compteur := 0; AnalyzeMoviePage(); exit; end else if (GetOption('Type de Lancement') = 1) or (GetOption('Type de Lancement') = 2) then begin begin if PickTreeExec(Address) then begin Adresse := Address; if (Adresse = 'version') then begin verifVersion(); end else if (Address = 'contact') then begin Launch('iexplore.exe','http://forum.antp.be/phpbb2/viewtopic.php?t=1453'); end else if (Adresse = AdressePlus) then begin numPageR := numPageR+1; AnalyzePage(AdressePlus); end else if (Adresse = AdressePrecedent) then begin numPageR := numPageR-1; AnalyzePage(AdressePrecedent); end else if (Adresse = AdresseSuivant) then begin numPageR := numPageR+1; AnalyzePage(AdresseSuivant); end else begin AnalyzeMoviePage(); end; end; end; end else begin if (GetOption('Type de Lancement') = 0) then begin Adresse := trouveResultat(MovieName); sleep(500); if Adresse <> '' then AnalyzeMoviePage(); end ; end; end; end; //------------------------------------------------------------------------------ // TROUVE LE BON RESULTAT //------------------------------------------------------------------------------ function trouveResultat(title : String) : String; var oK, couple, titre, adresse : String; begin for i:=0 to listeResultat.Count-1 do begin couple := listeResultat.GetString(i); titre := copy(couple,0,pos('|',couple)-1); adresse := copy(couple,pos('|',couple)+1,length(couple)-1); oK := compareTitle(title,titre); if oK = 'OK' then begin result := adresse; exit; end; end; if oK = 'KO' then result := ''; listeResultat.Free; end; //------------------------------------------------------------------------------ // FONCTION METS LE CHAMPS COMMENTAIRE A LA SUITE DU CHAMPS DESCRIPTION //------------------------------------------------------------------------------ procedure moveComments(); begin SetField(fieldDescription,GetField(fieldDescription)+GetField(fieldComments)); SetField(fieldComments,''); end; //------------------------------------------------------------------------------ // ANALYSE DE LA PAGE DU FILM //------------------------------------------------------------------------------ procedure AnalyzeMoviePage(); var Line, Value, AdresseCasting, AdresseSecret, AdressePresse, AdresseGalerie, aucun, Avertissement: string; LineNr, IntValue: Integer; BeginPos, EndPos, FinPos: Integer; begin //charge la page Line := GetPage(Adresse); Avertissement := ''; // URL if CanSetField(fieldURL) then begin if (GetOption('Type de Lancement') = 0) then begin SetField(fieldURL, '[Batch Allo-CinΘ] Ancien titre : '+MovieName); end else begin SetField(fieldURL, URLEncode(Adresse)); end; end; //translated title if CanSetField(fieldTranslatedTitle) then begin BeginPos := pos('<title>', Line); delete(Line,1, BeginPos+6); EndPos := pos('</title>', Line); Value := copy(Line, 1, EndPos - 1); SetField(fieldTranslatedTitle, formatTitre(value,GetOption('Format du Titre'))); end; // Picture if CanSetPicture then begin if (GetOption('Choix Image') = 3) then begin imageAmazon(Value); if (aucunAmazon = 'aucune image') then begin if (pos('Toute la Galerie Photos', Line) > 0) then begin aucun := Adresse; delete(aucun,1,pos('.fr', aucun)+3); AdresseGalerie := 'http://www.allocine.fr/'+copy(aucun, 1, pos('/', aucun))+'galerie_gen_cfilm='; delete(aucun,1,pos('=', aucun)); AdresseGalerie := AdresseGalerie +aucun; grandeTaille := 0; numPageG := 1; galerieImage(AdresseGalerie); end else begin BeginPos := pos('<td valign="top" style="padding:0 10 5 0">', Line); delete(Line,1, BeginPos); BeginPos := pos('width="100%"><img src=', Line); delete(Line,1, BeginPos+22); EndPos := pos('" border', Line); Value := copy(Line, 1, EndPos - 1); GetPicture(Value); end; end; end else if (GetOption('Choix Image') = 1) then begin BeginPos := pos('<td valign="top" style="padding:0 10 5 0">', Line); delete(Line,1, BeginPos); BeginPos := pos('width="100%"><img src=', Line); delete(Line,1, BeginPos+22); EndPos := pos('" border', Line); Value := copy(Line, 1, EndPos - 1); GetPicture(Value); end else if (GetOption('Choix Image') = 2) then begin // Adresse Galerie de photo if pos('Toute la Galerie Photos', Line) > 0 then begin aucun := Adresse; delete(aucun,1,pos('.fr', aucun)+3); AdresseGalerie := 'http://www.allocine.fr/'+copy(aucun, 1, pos('/', aucun))+'galerie_gen_cfilm='; delete(aucun,1,pos('=', aucun)); AdresseGalerie := AdresseGalerie +aucun; grandeTaille := 0; numPageG := 1; galerieImage(AdresseGalerie); end else begin BeginPos := pos('<td valign="top" style="padding:0 10 5 0">', Line); delete(Line,1, BeginPos); BeginPos := pos('width="100%"><img src=', Line); delete(Line,1, BeginPos+22); EndPos := pos('" border', Line); Value := copy(Line, 1, EndPos - 1); GetPicture(Value); end; end; end; // CanSetPicture // Director if CanSetField(fieldDirector) then begin if pos('<h4>RΘalisΘ par ', Line) > 0 then begin Delete(Line, 1, pos('<h4>RΘalisΘ par ', Line) + 15); EndPos := pos('</a></h4>', Line); Value := copy(Line, 1, EndPos - 1); HTMLRemoveTags(Value); HTMLDecode(Value); SetField(fieldDirector, Value); end; end; // Adresse casting complet if pos('Voir tout le casting', Line) > 0 then begin Delete(Line, 1, pos('<h4><a href=', Line) + 12); EndPos := pos('.html"', Line); AdresseCasting := 'http://www.allocine.fr'+copy(Line, 1, EndPos + 4); end; // Actors if (GetOption('Acteurs') = 1) then begin if pos('<h4>Avec ', Line) > 0 then begin Delete(Line, 1, pos('<h4>Avec ', Line) + 8); EndPos := pos('</h4><br />', Line); Value := copy(Line, 1, EndPos - 1); HTMLRemoveTags(Value); HTMLDecode(Value); SetField(fieldActors, Trim(Value)); end; end; //Country if CanSetField(fieldCountry) then begin if pos('<h4>Film ', Line) > 0 then begin Delete(Line, 1, pos('<h4>Film ', Line) + 8); EndPos := pos('</h4>', Line); Value := copy(Line, 1, EndPos - 2); Value := AnsiUpFirstLetter(Value); Value := AnsiMixedCase(Value,' -'); Value := transformCountry(Value); SetField(fieldCountry, Value); end; end; // Category if CanSetField(fieldCategory) then begin BeginPos := pos('<h4>Genre : ', Line); if (BeginPos > 0) then begin Delete(Line, 1, pos('<h4>Genre : ', Line) + 11); EndPos := pos('</h4>', Line); Value := copy(Line, 1, EndPos - 1); Value := AnsiUpFirstLetter(Value); SetField(fieldCategory, Value); end; end; // Length if CanSetField(fieldLength) then begin if pos('DurΘe : ', Line) > 0 then begin Delete(Line, 1, pos('DurΘe : ', Line) + 7); IntValue := StrToInt(copy(Line, 1, 1), 0) * 60; if pos('min.', Line) > 0 then begin delete(Line,1,pos('h', Line) + 1); Value := copy(Line, 1, pos('min.',Line)-1); Value := StringReplace(Value, ' ', ''); IntValue := IntValue + StrToInt(Value, 0); end; SetField(fieldLength, IntToStr(IntValue)); end; end; // Year if CanSetField(fieldYear) then begin if pos('<h4>AnnΘe de production : ', Line) > 0 then begin Delete(Line, 1, pos('<h4>AnnΘe de production : ', Line)+24); EndPos := pos('</h4>', Line); Value := copy(Line, 1, EndPos -1); SetField(fieldYear, Value); end; end; // Avertissement BeginPos := pos('Interdit', Line); if (BeginPos > 0) then begin Delete(Line, 1, BeginPos-1); EndPos := pos('</h4>', Line); Avertissement := copy(Line, 1, EndPos - 1)+#13#10#13#10; SetField(fieldComments, Trim(Avertissement)); end; // Original Title if CanSetField(fieldOriginalTitle) then begin BeginPos := pos('<h4>Titre original : ', Line); if BeginPos <> 0 then begin delete(Line,1, BeginPos+20); EndPos := pos('</h4>', Line); Value := copy(Line, 1, EndPos - 1); //Value := AnsiUpFirstLetter(Value); //Value := AnsiMixedCase(Value,' -'); HTMLRemoveTags(Value); SetField(fieldOriginalTitle, formatTitre(value,GetOption('Format du Titre'))); end else begin SetField(fieldOriginalTitle, GetField(fieldTranslatedTitle)); end; end; // Productor + More actors if (GetOption('Acteurs') = 2) then begin castingComplet(AdresseCasting); end; // Rating if (pos('<h4>Critiques :', Line) > 0) and (GetOption('Note ')<> 0)then begin Delete(Line, 1, pos('<h4>Critiques :', Line) + 14); if pos('Presse', Line) > 0 then begin EndPos := pos('.gif', Line); Delete(Line, 1, EndPos-2); Value := copy(Line, 1, 1); Delete(Line, 1, EndPos+3); if GetOption('Note') = 2 then begin Avertissement := Avertissement + 'Note de la presse : ' + Value + '/4 '; end; SetField(fieldRating,calculNote(Value)); end; if pos('Spectateurs', Line) > 0 then begin EndPos := pos('.gif', Line); Delete(Line, 1, EndPos-2); Value := copy(Line, 1, 1); Delete(Line, 1, EndPos+3); if GetOption('Note') = 2 then begin Avertissement := Avertissement + 'Note des spectateurs : ' + Value + '/4'; end; SetField(fieldRating,calculNote(Value)); end; if GetOption('Note') = 2 then begin Avertissement := Avertissement + #13#10#13#10; SetField(fieldComments, Avertissement); end; end; // Description if CanSetField(fieldDescription) then begin if pos('<h3><b>Synopsis', Line) > 0 then begin Delete(Line, 1, pos('<h3><b>Synopsis', Line)); Delete(Line, 1, pos('<h4>', Line) + 3); EndPos := pos('</h4>', Line); Value := copy(Line, 1, EndPos - 1); HTMLRemoveTags(Value); HTMLDecode(Value); SetField(fieldDescription, Trim(Value)); end; end; // Adresse tous les secrets de tournage if pos('Tous les secrets de tournage', Line) > 0 then begin aucun := Adresse; delete(aucun,1,pos('.fr', aucun)+3); AdresseSecret := 'http://www.allocine.fr/'+copy(aucun, 1, pos('/', aucun))+'anecdote_gen_cfilm='; delete(aucun,1,pos('=', aucun)); AdresseSecret := AdresseSecret +aucun; end; // Commments if (pos('<h3><b>Secrets de tournage', Line) > 0) and (GetOption('Secrets de tournage') = 1) then begin Delete(Line, 1, pos('<h3><b>Secrets de tournage', Line)); Delete(Line, 1, pos('</table>', Line)+7); Value := Avertissement+'Secrets de tournage :'+#13#10#13#10; BeginPos := pos('<h4><b>', Line); repeat Delete(Line, 1, BeginPos+6); EndPos := pos('</b></h4>', Line); aucun := Trim(copy(Line, 1, EndPos - 1)); aucun := StringReplace(aucun, #13#10, ''); Value := Value + aucun +' :'+#13#10; BeginPos := pos('<h4>', Line); Delete(Line, 1, BeginPos-1); FinPos := FinPos - BeginPos+1; EndPos := pos('</h4>', Line); aucun := Trim(copy(Line, 1, EndPos - 1)); aucun := StringReplace(aucun, #13#10, ''); Value := Value + aucun +#13#10#13#10; Delete(Line, 1, EndPos-1); FinPos := FinPos - EndPos+1; BeginPos := pos('<h4><b>', Line); delete(Line, 1, BeginPos-8); FinPos := FinPos - BeginPos+8; aucun := copy(Line, 1, 5); BeginPos := pos('<h4><b>', Line); FinPos := pos('</table>',Line); if (BeginPos > FinPos) then BeginPos := 0; until ((BeginPos = 0) or (aucun = 'link1')); HTMLRemoveTags(Value); HTMLDecode(Value); SetField(fieldComments, Trim(Value)); end else if (pos('<h3><b>Secrets de tournage', Line) > 0) and (GetOption('Secrets de tournage') = 2) then begin La_liste := Avertissement+'Secrets de tournage :'+#13#10#13#10; numPage := 1; secretComplet(AdresseSecret); end; // Pour avoir le synopsis et les secrets de tournage dans le champs descriptions if (GetOption('Disposition') = 0) then begin moveComments(); end; // Critiques presse if ((GetOption('Critiques Presse') <> 0) and (pos('<h3><b>Critiques Presse</b></h3>', Line) > 0)) then begin Value := GetField(fieldComments)+'Critiques Presse :'+#13#10#13#10; if (GetOption('Critiques Presse') =1) then begin repeat BeginPos := pos('<td valign="top"><h4><b>', Line); delete(Line, 1, BeginPos-1); // Journal et nom du critique EndPos := pos('<img', Line); aucun := copy(Line, 1, EndPos); HTMLRemoveTags(aucun); aucun := StringReplace(aucun, ' ', ' '); Value := Value + aucun; // Note EndPos := pos('.gif', Line); Delete(Line, 1, EndPos-2); aucun := copy(Line, 1, 1); Value := Value+' - Note : '+aucun+ '/4 '; // la critique BeginPos := pos('<div align="justify"><h4>', Line); delete(Line, 1, BeginPos-1); EndPos := pos('</h4></div>', Line); aucun := copy(Line, 1, EndPos); HTMLRemoveTags(aucun); aucun := StringReplace(aucun, ' ', ''); aucun := trim(aucun); Value := Value+aucun+#13#10; until (pos('<td valign="top"><h4><b>', Line) = 0); SetField(fieldComments, Trim(Value)); end else if (GetOption('Critiques Presse') = 2) then begin La_liste := Value; numPage := 1; // L'url des critiques presse if (pos('Toutes les critiques Presse...', Line) > 0) then begin aucun := Adresse; delete(aucun,1,pos('.fr', aucun)+3); AdressePresse := 'http://www.allocine.fr/'+copy(aucun, 1, pos('/', aucun))+'revuedepresse_gen_cfilm='; delete(aucun,1,pos('=', aucun)); AdressePresse := AdressePresse +aucun; end; critiquesPresseComplet(adressePresse); end; end; end; //------------------------------------------------------------------------------ // ANALYSE DE LA PAGE CRITIQUES PRESSE //------------------------------------------------------------------------------ procedure critiquesPresseComplet(pageCritiques: string); var Line, LineSuivant, Value, pageSuivante, aucun :string; BeginPos, EndPos : Integer; begin // pour eviter les time-out sleep(1500); // charge la page Line := GetPage(pageCritiques); LineSuivant := Line; numPage := numPage + 1; if Pos('<b>Critiques Presse</b>', Line) > 0 then begin // Les critiques presses BeginPos := Pos('<b>Critiques Presse</b>', Line); Delete(Line, 1, BeginPos-1); repeat BeginPos := pos('<td valign="top"><h4><b>', Line); delete(Line, 1, BeginPos-1); // Journal et nom du critique EndPos := pos('<img', Line); aucun := copy(Line, 1, EndPos); HTMLRemoveTags(aucun); aucun := StringReplace(aucun, ' ', ' '); Value := aucun; // Note EndPos := pos('.gif', Line); Delete(Line, 1, EndPos-2); aucun := copy(Line, 1, 1); Value := Value+' - Note : '+aucun+ '/4 '; // la critique BeginPos := pos('<div align="justify"><h4>', Line); delete(Line, 1, BeginPos-1); EndPos := pos('</h4></div>', Line); aucun := copy(Line, 1, EndPos); HTMLRemoveTags(aucun); aucun := StringReplace(aucun, ' ', ''); aucun := trim(aucun); aucun := copy(aucun, 1, pos('Voir aussi : La revue de presse de',aucun)-1); Value := Value+aucun+#13#10; // La critique dans la liste La_liste := La_liste + Value; until (pos('<td valign="top"><h4><b>', Line) = 0); SetField(fieldComments, La_liste); // si on a plusieurs pages pageSuivante := pageCritiques; delete(pageSuivante,1,pos('.fr', pageSuivante)+2); pageSuivante := copy(pageSuivante, 1, pos('.html', pageSuivante)-1); if pos('page',pageSuivante) = 0 then begin pageSuivante := pageSuivante+'&page='+IntToStr(numPage)+'.html'; end else begin pageSuivante := copy(pageSuivante, 1, pos('&page=', pageSuivante)-1)+'&page='+IntToStr(numPage)+'.html'; end; BeginPos := pos(pageSuivante,LineSuivant); if BeginPos <> 0 then begin pageSuivante := 'http://www.allocine.fr'+pageSuivante; critiquesPresseComplet(pageSuivante); end; end; end; //------------------------------------------------------------------------------ // ANALYSE DE LA PAGE CASTING //------------------------------------------------------------------------------ procedure castingComplet(pageCasting: string); var Line, Role, Acteur, couple, liste, Producteur :string; BeginPos, EndPos, OtherPos : Integer; begin //pour eviter les time-out sleep(1500); //charge la page Line := GetPage(pageCasting); if (GetOption('Acteurs') = 2) then begin if Pos('<b>Acteur(s)</b>', Line) > 0 then begin //liste des acteurs BeginPos := Pos('<b>Acteur(s)</b>', Line); Delete(Line, 1, BeginPos); BeginPos := Pos('<h5>', Line); liste := ''; repeat // le role delete(Line,1,BeginPos-1); EndPos := Pos('</h5>', Line); Role := copy(Line,1,EndPos); HTMLRemoveTags(Role); delete(Line,1,EndPos); // le nom de l'acteur BeginPos := Pos('<h4><a href', Line); delete(Line,1,BeginPos+3); BeginPos := Pos('<h4>', Line); delete(Line,1,BeginPos-1); EndPos := Pos('</h4>', Line); Acteur := copy(Line,1,EndPos); HTMLRemoveTags(Acteur); delete(Line,1,EndPos); // couple acteur (r⌠le) if (Role <> '') then begin couple := Acteur +' ('+Role+'), '; end else begin couple := Acteur +', '; end; // ajout du couple dans la liste if (Role <> 'ScΘnariste') then begin // pour un nouvel ajout BeginPos := Pos('<h5>', Line); OtherPos := Pos('</table>',Line); liste := liste + couple; if (BeginPos > OtherPos) then BeginPos := 0; end else begin BeginPos := 0; end; until (BeginPos = 0); EndPos := length(liste); liste := copy(liste,1,EndPos-2)+'.'; SetField(fieldActors, liste); end; // le producteur if Pos('<h5>Producteur', Line) > 0 then begin BeginPos := Pos('<h5>Producteur', Line); Delete(Line, 1, BeginPos); BeginPos := Pos('<h4><a href', Line); delete(Line,1,BeginPos+3); BeginPos := Pos('<h4>', Line); delete(Line,1,BeginPos+3); EndPos := Pos('</h4>', Line); Producteur := copy(Line,1,EndPos-1); SetField(fieldProducer, Producteur); end; end; end; //------------------------------------------------------------------------------ // ANALYSE DE LA PAGE SECRETS DE TOURNAGE //------------------------------------------------------------------------------ procedure secretComplet(pageSecret: string); var Line, LineSuivant, Titre, Texte, couple, pageSuivante :string; BeginPos, EndPos : Integer; begin //pour eviter les time-out sleep(1500); //charge la page Line := GetPage(pageSecret); LineSuivant := Line; numPage := numPage + 1; if Pos('Secrets de tournage</h2>', Line) > 0 then begin //liste des secrets BeginPos := Pos('Secrets de tournage</h2>', Line); Delete(Line, 1, BeginPos); BeginPos := Pos('<h4><b>', Line); repeat // le titre Delete(Line, 1, BeginPos+6); EndPos := pos('</b></h4>', Line); Titre := Trim(copy(Line, 1, EndPos - 1)); BeginPos := pos('<h4>', Line); HTMLRemoveTags(Titre); Titre := StringReplace(Titre, #13#10, ''); // le texte Delete(Line, 1, BeginPos-1); EndPos := pos('</h4>', Line); Texte := Trim(copy(Line, 1, EndPos - 1)); HTMLRemoveTags(Texte); Texte := StringReplace(Texte, #13#10, ''); // le couple titre : texte couple := Titre+' :'+#13#10+Texte+#13#10#13#10; Delete(Line, 1, EndPos-1); if (Titre <> 'Toutes les offres spΘciales') then begin // ajout du couple dans la liste La_liste := La_liste + couple; // pour un nouvel ajout BeginPos := pos('<h4><b>', Line); EndPos := pos('</table>',Line); if (BeginPos > EndPos) then BeginPos := 0; end else begin BeginPos := 0; end; until (BeginPos = 0); SetField(fieldComments, La_liste); // si on a plusieurs pages pageSuivante := pageSecret; delete(pageSuivante,1,pos('.fr', pageSuivante)+2); pageSuivante := copy(pageSuivante, 1, pos('.html', pageSuivante)-1); if pos('page',pageSuivante) = 0 then begin pageSuivante := pageSuivante+'&page='+IntToStr(numPage)+'.html'; end else begin pageSuivante := copy(pageSuivante, 1, pos('&page=', pageSuivante)-1)+'&page='+IntToStr(numPage)+'.html'; end; BeginPos := pos(pageSuivante,LineSuivant); if BeginPos <> 0 then begin pageSuivante := 'http://www.allocine.fr'+pageSuivante; secretComplet(pageSuivante); end; end; end; //------------------------------------------------------------------------------ // ANALYSE DE LA PAGE GALERIE //------------------------------------------------------------------------------ procedure galerieImage(pageGalerie: string); var Line, Value, LineSuivant, pageSuivante :string; BeginPos, EndPos, taille : Integer; begin //pour eviter les time-out sleep(1500); //charge la page Line := GetPage(pageGalerie); LineSuivant := Line; numPageG := numPageG + 1 ; BeginPos := pos('<td align="center" colspan="2">', Line); delete(Line,1, BeginPos); BeginPos := pos('<img src="', Line); delete(Line,1, BeginPos+9); EndPos := pos('" border', Line); Value := copy(Line, 1, EndPos - 1); delete(Line,1, EndPos); BeginPos := pos('alt="', Line); delete(Line,1, BeginPos+4); EndPos := pos('Ko"', Line); taille := StrToInt(Trim(copy(Line, 1, EndPos - 1)),0); grandeTaille := taille; LaGrandeImage := Value; (* if numPageG = 2 then begin LaPremiereGrandeImage := Value; premiereTaille := taille; end; // si on a plusieurs pages pageSuivante := pageGalerie; delete(pageSuivante,1,pos('.fr', pageSuivante)+2); pageSuivante := copy(pageSuivante, 1, pos('.html', pageSuivante)-1); if pos('page',pageSuivante) = 0 then begin pageSuivante := pageSuivante+'&page='+IntToStr(numPageG)+'.html'; end else begin pageSuivante := copy(pageSuivante, 1, pos('&page=', pageSuivante)-1)+'&page='+IntToStr(numPageG)+'.html'; end; BeginPos := pos(pageSuivante,LineSuivant); if BeginPos <> 0 then begin pageSuivante := 'http://www.allocine.fr'+pageSuivante; galerieImage(pageSuivante); end; if (premiereTaille > grandeTaille) then begin GetPicture(LaPremiereGrandeImage, False); end else begin *) GetPicture(LaGrandeImage); (* end; *) end; //------------------------------------------------------------------------------ // AJOUTE UN COUPLE FILM / ADRESSE A LA LISTE DE RESULTAT //------------------------------------------------------------------------------ procedure AddMoviesTitles(var Line: string); var MovieTitle, MovieAddress, aucun: string; StartPos, EndPos : Integer; begin //compte les rΘsultats compteur := 0; listeResultat := TStringList.Create; repeat StartPos := pos('<h4><a href=', Line); if (StartPos > 0) and (StartPos < pos('<h3><b>Rechercher :', Line)) then begin Delete(Line, 1, StartPos + 12); EndPos := pos('.html"', Line); MovieAddress := copy(Line, 1, EndPos+4); StartPos := pos('>', Line)+1; MovieTitle := copy(Line, StartPos, pos('</h4>', Line) - StartPos); MovieTitle := StringReplace(MovieTitle, ' ', ' '); HTMLRemoveTags(MovieTitle); delete(Line,1,pos('</h4>',Line)-1); aucun := copy(Line, 1, pos('</td>',Line)-1); aucun := StringReplace(aucun, ' ', ' '); aucun := StringReplace(aucun, #13#10, ''); aucun := StringReplace(aucun, ' ', ''); HTMLRemoveTags(aucun); adresse := 'http://www.allocine.fr' + MovieAddress; // Pour le mode batch le titre doit Ωtre "propre" listeResultat.Add(MovieTitle+'|'+adresse); // si on a des informations complΘmentaires if (aucun <> '') then begin MovieTitle := MovieTitle +' '+aucun; end; PickTreeAdd(MovieTitle, adresse); (*if (compteur = 0) then begin LePremierFilmAdresse := adresse; end;*) compteur := compteur+1; end else StartPos := 0; until (StartPos < 1); // si on a plus de rΘsultats StartPos := pos('Plus de films',Line); if StartPos <> 0 then begin AdressePlus := 'http://www.allocine.fr/recherche/?motcle='+UrlEncode(MovieName)+'&rub=1&page='+IntToStr(numPageR); PickTreeAdd('Plus de rΘsultats',AdressePlus); end; numTemp := numPageR-1; strTemp := IntToStr(numTemp); if pos('<a href="/recherche/?motcle='+MovieName+'&rub=1&page='+strTemp,Line) <> 0 then begin AdressePrecedent := 'http://www.allocine.fr/recherche/?motcle='+UrlEncode(MovieName)+'&rub=1&page='+strTemp; PickTreeAdd('Films prΘcΘdents',AdressePrecedent); end; numTemp := numPageR+1; strTemp := IntToStr(numTemp); if pos('<a href="/recherche/?motcle='+MovieName+'&rub=1&page='+strTemp,Line) <> 0 then begin AdresseSuivant := 'http://www.allocine.fr/recherche/?motcle='+UrlEncode(MovieName)+'&rub=1&page='+strTemp; PickTreeAdd('Films suivants',AdresseSuivant); end; end; //------------------------------------------------------------------------------ // RECUPERE GRANDE IMAGE AMAZON.FR //------------------------------------------------------------------------------ procedure imageAmazon(title : String); var adresseRecherche, Line : String; StartPos: Integer; begin PickTreeClear; adresseRecherche := 'http://www.amazon.fr/exec/obidos/search-handle-url/index=dvd-fr&field-keywords='+UrlEncode(title); Line := GetPage(adresseRecherche); if pos('satisfaisante pour votre recherche sur', Line) > 0 then begin exit; end else if (pos('Sur ce DVD', Line) > 0) or (pos('Amazon.fr : DVD:', Line) > 0) then begin importAmazon(Line); end else if pos('résultats au total pour', Line) > 0 then begin StartPos := pos('résultats au total pour', Line); delete(Line, 1, StartPos); recupAmazon(Line, title); end; end; //------------------------------------------------------------------------------ // SUPPRIME LES ACCENTS //------------------------------------------------------------------------------ function supprimeAccents(NomFilm : String) : String; begin NomFilm := StringReplace(NomFilm, 'Θ', 'e'); NomFilm := StringReplace(NomFilm, 'Φ', 'e'); NomFilm := StringReplace(NomFilm, 'α', 'a'); NomFilm := StringReplace(NomFilm, 'τ', 'c'); NomFilm := StringReplace(NomFilm, '∙', 'u'); NomFilm := StringReplace(NomFilm, 'δ', 'e'); NomFilm := StringReplace(NomFilm, 'Ω', 'e'); NomFilm := StringReplace(NomFilm, '⌠', 'o'); delete(NomFilm, pos(' - ',NomFilm), length(NomFilm)); if (pos(', ',NomFilm) > 0) then delete(NomFilm, 1, pos(', ',NomFilm)+1); if (pos('(',NomFilm) > 0) then delete(NomFilm, pos('(',NomFilm), length(NomFilm)); if (pos(':',NomFilm) > 0) then delete(NomFilm, pos(':',NomFilm), length(NomFilm)); result := trim(NomFilm); end; //------------------------------------------------------------------------------ // IMPORTE L'IMAGE AMAZON //------------------------------------------------------------------------------ procedure recupAmazon(Line, title : String); begin if compareTitle(title,recupTitle(Line)) = 'OK' then begin importAmazon(Line); end else begin trouveTitle(Line,title); end; end; //------------------------------------------------------------------------------ // IMPORTE L'IMAGE AMAZON //------------------------------------------------------------------------------ procedure importAmazon(Line : String); var ImageAddress : String; StartPos: Integer; begin StartPos := pos('http://images-eu.amazon.com/images/P/', Line); delete(Line, 1, StartPos-1); ImageAddress := copy(Line, 0, pos('"', Line) - 1); ImageAddress := StringReplace(ImageAddress, 'THUMBZZZ', 'LZZZZZZZ'); Sleep(500); GetPicture(ImageAddress); end; //------------------------------------------------------------------------------ // RECUPERE LE TITRE //------------------------------------------------------------------------------ function recupTitle(Line : String) : String; var title : String; StartPos: Integer; begin StartPos := pos('http://images-eu.amazon.com/images/P/', Line); delete(Line, 1, StartPos-1); StartPos := pos('<b>', Line); delete(Line, 1, StartPos-1); title := copy(Line, 1, pos('</b></a>', Line)-1); HTMLRemoveTags(title); title := StringReplace(title, #13#10, ''); result := title; end; //------------------------------------------------------------------------------ // VERIFIE LE RESULTAT AMAZON //------------------------------------------------------------------------------ function compareTitle(titleAllo, title : String) : String; begin title := supprimeAccents(trim(AnsiLowerCase(title))); titleAllo := supprimeAccents(trim(AnsiLowerCase(titleAllo))); if (title = titleAllo) then begin result := 'OK'; end else begin result := 'KO'; end; end; //------------------------------------------------------------------------------ // TROUVE LE BON TITRE SI LE PREMIER N'EST PAS LE BON //------------------------------------------------------------------------------ procedure trouveTitle(Line, title : String); var StartPos: Integer; oK : String; begin StartPos := pos('<a href=/exec/obidos/ASIN/', Line); repeat delete(Line, 1, StartPos+length('<a href=/exec/obidos/ASIN/')); oK := compareTitle(title,recupTitle(Line)); if oK = 'OK' then importAmazon(Line); StartPos := pos('http://images-eu.amazon.com/images/P/', Line); delete(Line, 1, StartPos-1); StartPos := pos('<b>', Line); delete(Line, 1, StartPos-1); StartPos := pos('<a href=/exec/obidos/ASIN/', Line); until (StartPos = 0) or (oK = 'OK'); if oK = 'KO' then aucunAmazon := 'aucune image'; end; //------------------------------------------------------------------------------ // NETTOIE LE TITRE DU FICHIER POUR AVOIR LE TITRE DE FILM //------------------------------------------------------------------------------ function cleanTitle(title : String) : string; var i,j, fin : Integer; temp : String; begin title := AnsiUpperCase(title); if title <> '' then begin // Nettoie les tags fichiers, merci Atmosfear pour les tags i:=pos('.DVD',title); if i <> 0 then begin title := copy(title,1,i-1); end; i:=pos('.DIVX',title); if i <> 0 then begin title := copy(title,1,i-1); end; i:=pos('.FREN',title); if i <> 0 then begin title := copy(title,1,i-1); end; i:=pos('.GERM',title); if i <> 0 then begin title := copy(title,1,i-1); end; i:=pos('.INT',title); if i <> 0 then begin title := copy(title,1,i-1); end; i:=pos('.LIM',title); if i <> 0 then begin title := copy(title,1,i-1); end; i:=pos('.PROP',title); if i <> 0 then begin title := copy(title,1,i-1); end; i:=pos('.REPACK',title); if i <> 0 then begin title := copy(title,1,i-1); end; i:=pos('.SUBB',title); if i <> 0 then begin title := copy(title,1,i-1); end; i:=pos('.UNSUB',title); if i <> 0 then begin title := copy(title,1,i-1); end; i:=pos('.WS',title); if i <> 0 then begin title := copy(title,1,i-1); end; i:=pos('.XVID',title); if i <> 0 then begin title := copy(title,1,i-1); end; i:=pos('.AC3',title); if i <> 0 then begin title := copy(title,1,i-1); end; i:=pos('.UNRAT',title); if i <> 0 then begin title := copy(title,1,i-1); end; title := StringReplace(title, '.', ' '); title := StringReplace(title, ',', ' '); title := StringReplace(title, ':', ''); title := StringReplace(title, '-', ''); title := StringReplace(title, ' ', ' '); i := 0; // Nettoie les tags de team if (pos('(',title) <> 0) then begin i := pos('(',title); temp := copy(title,0,i-1); j := pos(')',title); fin := Length(title); title := temp + copy(title,j+1,fin); end; if (pos('[',title) <> 0) then begin i := pos('[',title); temp := copy(title,1,i-1); j := pos(']',title); fin := Length(title); title := temp + copy(title,j+1,fin); end; title := AnsiLowerCase(title); title := AnsiUpFirstLetter(title); title := AnsiMixedCase(title,' -'); end; result := title; end; //------------------------------------------------------------------------------ // TRANSFORME NATIONALITE EN PAYS //------------------------------------------------------------------------------ function transformCountry(country : String) : string; begin country := AnsiLowerCase(country); country := StringReplace(country, 'amΘricain', 'USA'); country := StringReplace(country, 'japonais', 'Japon'); country := StringReplace(country, 'franτais', 'France'); country := StringReplace(country, 'tha∩landais', 'Tha∩lande'); country := StringReplace(country, 'sud-corΘen', 'CorΘe'); country := StringReplace(country, 'espagnol', 'Espagne'); country := StringReplace(country, 'italien', 'Italie'); country := StringReplace(country, 'britannique', 'Grande-Bretagne'); country := StringReplace(country, 'hong-kongais', 'Hong-Kong'); country := StringReplace(country, 'nΘo-zΘlandais', 'Nouvelle-ZΘlande'); country := StringReplace(country, 'chinois', 'Chine'); country := StringReplace(country, 'ta∩wanais', 'Ta∩wan'); country := StringReplace(country, 'mexicain', 'Mexique'); country := StringReplace(country, 'brΘsilien', 'BrΘsil'); country := StringReplace(country, 'allemand', 'Allemagne'); country := StringReplace(country, 'belge', 'Belgique'); country := StringReplace(country, 'suΘdois', 'SuΦde'); country := StringReplace(country, 'danois', 'Danemark'); country := StringReplace(country, 'finlandais', 'Finlande'); country := StringReplace(country, 'islandais', 'Islande'); country := StringReplace(country, 'nΘerlandais', 'Pays-Bas'); country := StringReplace(country, 'portugais', 'Portugal'); country := StringReplace(country, 'canadien', 'Canada'); country := StringReplace(country, 'australien', 'Australie'); country := StringReplace(country, 'russe', 'Russie'); country := StringReplace(country, 'tchΦque', 'RΘpublique TchΦque'); country := StringReplace(country, 'chilien', 'Chili'); country := StringReplace(country, 'hongrois', 'Hongrie'); country := StringReplace(country, 'argentin', 'Argentine'); country := StringReplace(country, 'roumain', 'Roumanie'); country := StringReplace(country, '', ''); result := country; end; //------------------------------------------------------------------------------ // PROGRAMME PRINCIPAL //------------------------------------------------------------------------------ begin if CheckVersion(3,5,0) then begin numPageR := 1; if (GetOption('Recherche sur le titre') = 0) then begin MovieName := GetField(fieldTranslatedTitle); if MovieName = '' then MovieName := GetField(fieldOriginalTitle); end else if (GetOption('Recherche sur le titre') = 1) then begin MovieName := GetField(fieldOriginalTitle); if MovieName = '' then MovieName := GetField(fieldTranslatedTitle); end; MovieName := cleanTitle(MovieName); if (GetOption('Type de Lancement') = 1) then begin if Input('AllocinΘ.fr by ScorEpioN', 'Entrez le titre du film :', MovieName) then begin if Pos('allocine.', MovieName) > 0 then begin adresse := MovieName; AnalyzeMoviePage(); end else begin AnalyzePage('http://www.allocine.fr/recherche/?motcle='+UrlEncode(MovieName)+'&rub=1'); end; end; end else begin if (premiereExecution = 0) then begin premiereExecution := -1; if (ShowConfirmation('Vous allez executer le script sans confirmation, cliquer sur ''''OUI'''' pour continuer') = True) then begin AnalyzePage('http://www.allocine.fr/recherche/?motcle='+UrlEncode(MovieName)+'&rub=1'); end else exit; end else begin AnalyzePage('http://www.allocine.fr/recherche/?motcle='+UrlEncode(MovieName)+'&rub=1'); end; end; end else ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.0)'); end.